package base.exa06_parameterPassingAndObjectComposition;

/**
 * 此示例展示了对象组合的场景
 */
public class ObjectCombination {

    public static void main(String[] args) {

        TV haierTV = new TV();
        haierTV.setChannel(5);
        System.out.println("haierTV的频道是： 频道"+haierTV.getChannel());
        //新建一个Family对象
        Family zhangSanFamily = new Family();
        //将之前新建的TV对象组合进Family
        zhangSanFamily.buyTV(haierTV);
        System.out.println("张三Family开始看电视节目:");
        zhangSanFamily.seeTV();//通过Family对象使用TV对象的方法
        int m = 2;
        System.out.println("张三Family将电视更换到"+m+"频道");
        zhangSanFamily.remoteControl(m);
        System.out.println("haierTV的频道是: 频道"+haierTV.getChannel());
        System.out.println("张三Family在看电视节目");
        zhangSanFamily.seeTV();

    }
}

/**
 * Family类，其中属性是引用类型TV
 */
class Family {

    //复用了TV类型
    TV homeTV;

    void buyTV(TV tv) {
        homeTV = tv;
    }
    void remoteControl(int m) {
        homeTV.setChannel(m);

    }
    void seeTV() {
        homeTV.showProgram();
    }
}

/**
 * TV类，里面的属性是基本类型
 */
class TV {
    int channel;

    void setChannel(int m) {
        if(m>=1) {
            channel = m;
        }
    }

    int getChannel() {
        return channel;
    }

    void showProgram() {
        switch(channel) {
            case 1 : System.out.println("综合频道");
                break;
            case 2 : System.out.println("经济频道");
                break;
            case 3 : System.out.println("文艺频道");
                break;
            case 4 : System.out.println("国际频道");
                break;
            case 5 : System.out.println("体育频道");
                break;
            default : System.out.println("不能收看"+channel+"频道");
        }
    }
}
